Metodologia

Todas as receitas arrecadadas pelo Governo Federal passam por uma dupla classificação:

  • uma classificação por “natureza de receita”, que procura identificar a origem do recursos, segundo o fato gerador (receitas de impostos, de contribuições para o INSS, de taxas, de aluguéis, de operações de crédito etc.); e

  • uma classificação por “fonte/destinação” dos recursos, que procura agrupar e direcionar os recursos de acordo com as aplicações previstas na legislação (por exemplo, 18% da receita de impostos deve ser aplicada em Educação, os recursos das contribuições do INSS devem ser aplicados no pagamento de benefícios previdenciários etc.)

Além disso, no orçamento da União, cada despesa autorizada deve especificar justamente qual a origem do recurso que irá custeá-la. Isso é feito justamente por meio desse classificador “fonte/destinação de recursos”. Como explica o Manual Técnico de Orçamento de 2018 (MTO 2018), da Secretaria de Orçamento Federal:

A Fonte, nesse contexto, é instrumento de Gestão da Receita e da Despesa ao mesmo tempo, pois tem como objetivo assegurar que determinadas receitas sejam direcionadas para financiar atividades (despesas) do governo em conformidade com Leis que regem o tema.

Um exemplo prático pode ajudar a iluminar um pouco mais o assunto. Imagine que um cidadão pagou um DARF na rede bancária referente a imposto de renda apurado em sua declaração de ajuste anual. Esse DARF possui um código, o código de recolhimento 0211. Os recursos arrecadados serão classificados na natureza de receita correspondente ao Imposto de Renda Pessoa Física, e serão creditados na conta única do Tesouro. No entanto, o Governo não poderá aplicar esse dinheiro da forma que entender melhor: existem uma série de destinações dos recursos de impostos criadas pela legislação. Assim, esse recurso deverá ser destinado da seguinte forma:

  • 0,6% ao Fundo Constitucional do Norte;
  • 1,8% ao Fundo Constitucional do Nordeste;
  • 0,6% ao Fundo Constitucional do Centro-Oeste;
  • 24,5% ao Fundo de Participação dos Municípios;
  • 21,5% ao Fundo de Participação dos Estados;
  • 9,72% à Manutenção e Desenvolvimento do Ensino (são os 18% mencionados acima, porém esse percentual é aplicado ao que resta dos recursos arrecadados após a distribuição aos Fundos de Participação dos Municípios e dos Estados – 46%);
  • 41,28%, o restante, serão destinados de forma mais ou menos discricionária no Orçamento da União.

Para controlar todas essas destinações, o governo utiliza as tais “fontes/destinações de recursos”.

Ou seja, as receitas orçamentárias arrecadadas são distribuídas em fontes de recursos, e os recursos das fontes de recursos são alocados às despesas orçamentárias.

Assim, embora não seja possível afirmar categoricamente que um determinado real pago por um cidadão a título de imposto de renda foi com certeza utilizado no pagamento de uma determinada despesa, sabemos que um percentual dos recursos arrecadados foram destinados a certas fontes, e sabemos os percentuais dessas fontes que foram destinadas a cada uma das despesas.

Dessa forma, analisando essas distribuições e calculando esses percentuais, podemos estimar então que um percentual de uma determinada receita foi destinada a uma determinada despesa. É o que fizemos aqui neste documento.

Os valores utilizados são aqueles da Lei Orçamentária Anual de 2018.

Como as receitas foram classificadas

Existem diversas formas possíveis de se agruparem as receitas orçamentárias. Para este exercício, procuramos destacar certos agrupamentos de receitas, tais como as emissões de títulos públicos, as receitas do INSS, as receitas de impostos etc.

A classificação por natureza de receitas utiliza uma estrutura de codificação baseada num código numérico de 8 dígitos, em que as posições dos dígitos constituem classificadores intermediários, da seguinte forma:

Estrutura da Natureza de Receita. Fonte: MTO 2018

Estrutura da Natureza de Receita. Fonte: MTO 2018

Para esta análise, as receitas foram agrupadas no seu terceiro nível, o nível de Espécie. Além disso, os recursos do Regime Geral de Previdência Social foram tratados de forma separada, por meio do classificador “unidade orçamentária”.

Assim, as receitas foram agrupadas da seguinte forma:

Classificação adotada para as receitas

Classificação adotada para as receitas

Como as despesas foram classificadas

Para as despesas, foi adotada uma classificação baseada naquela utiliza no capítulo “Estrutura do Gasto Público no Brasil”, de autoria de Mansueto Almeida, do livro “A Reforma Esquecida”, acrescentando-se as despesas da dívida pública e as transferências a estados e municípios.

Essa classificação estabelece um recorte das despesas públicas da seguinte forma:

Classificação adotada para as receitas

Classificação adotada para as receitas

Tratamento dos dados

library(readxl)
library(tidyverse)
rec <- read_excel("dados/Sankey Receitas por Fonte.xlsx", skip = 10)
des <- read_excel("dados/Sankey Despesas por Fonte.xlsx", skip = 10)

names(rec) <- c("nr", "fte", "fte_nome", "rec")
names(des) <- c("fte", "fte_nome", "nd", "des")

rec <- rec %>%
  group_by(nr) %>%
  mutate(rec = rec,  #/1000000
         subtot_rec = sum(rec),
         per_rec_fte = rec/sum(rec)) # calcula os % de distrib. de cada rec nas ftes

des <- des %>%
  group_by(fte) %>%
  mutate(des = des, #/1000000
         per_fte_des = des/sum(des)) # calcula os % de distrib. de fte nas desps

matriz <- rec %>%
  full_join(des)

# calcula o % de dist. de cada rec nas desps
# calcula então o tamanho de cada link, partir do subtotal de cada receita. ignorando se for menor que um bilhao
### a fazer: remover as linhas com um anti_join, para não contaminar a informação do hoover (outgoing, ingoing count)

matriz <- matriz %>% 
  mutate(p = per_rec_fte * per_fte_des, 
         # ramo = ifelse((round(subtot_rec * p,0)<1000000000),0,round(subtot_rec * p,0))) %>%
         ramo = round(subtot_rec * p,0)) %>% 
  group_by(nr,nd) %>%                        
  summarise(p = sum(p),
            ramo = sum(ramo)) %>%
  select(nr,nd,p,ramo)
tamanho_critico <- 500000000 
ramos_a_limpar <- matriz %>% filter(ramo<tamanho_critico) #fazer no shiny

matriz_original <- matriz

matriz <- matriz %>%
  anti_join(ramos_a_limpar)
# relacao unica dos rotulos de receita e despesa:
rotulos <- c(unique(matriz$nr),unique(matriz$nd))

# conta os nós e gera sequencia numerica a partir de zero
num_nos <- length(rotulos)
nos <- 0:(num_nos-1)

# cria tabelinha para numerar os nos
tab_aux <- data.frame(rotulos, nos)

# incorpora os números dos nodes na matriz, para a receita... e para a despesa.
matriz <- matriz %>%
  left_join(tab_aux, by = c("nr" = "rotulos")) %>%   
  left_join(tab_aux, by = c("nd" = "rotulos"), suffix = c("_rec","_desp"))
library(RColorBrewer)
#library(extrafont)
#font_import()
#loadfonts(device = "win")
#display.brewer.all()

# DEFINIÇÕES DAS CORES
azul_STN <- "#004a93"
amarelo_STN <- "#ffd500"
amarelo_transluc <- "rgba(181,150,40,0.7)" # links receitas normais
verde_STN <- "#329c32"
cor_divida <- "#dd3127"
cor_divida_transluc <- "rgba(221, 49, 39,0.7)"
cor_divida_transluc2 <- "rgba(229, 90, 39,0.7)" # links outras receitas destinadas à dívida
cor_RGPS <- azul_STN
cor_RGPS_transluc <- "rgba(0,75,147,0.7)"
cor_RGPS_transluc2 <- "rgba(68,75,147,0.55)" # links outras receitas destinada ao RGPS
### obs: se o alpha for muito baixo, o hover sobre o ramo/link fica imperceptível!

# CONSTRUÇÃO DO VETOR DE CORES DOS NOS
num_nos_rec <- length(unique(matriz$nr))
num_nos_des <- length(unique(matriz$nd))

cores_nos <- 1:num_nos
cores_nos[1:num_nos_rec] <- amarelo_STN
cores_nos[(num_nos_rec+1):(num_nos_rec+num_nos_des)] <- verde_STN

# destacar dívida

posicoes_divida <- c(
  which(unique(matriz$nr)=="Emissões de títulos"),    # esses rotulos poderiam estar parametrizados
  num_nos_rec+which(unique(matriz$nd)=="Amortização da Dívida"),
  num_nos_rec+which(unique(matriz$nd)=="Juros"))

cores_nos[posicoes_divida] <- cor_divida

# destacar previdência

posicoes_previdencia <- c(
  which(unique(matriz$nr)=="Contribuições e outras receitas do RGPS"),
  num_nos_rec+which(unique(matriz$nd)=="Benefícios Previdenciários RGPS"))

cores_nos[posicoes_previdencia] <- cor_RGPS
  
matriz$cores_ramos <- amarelo_transluc

for (i in 1:nrow(matriz)){
  if (matriz$nr[i] == "Emissões de títulos"){
    matriz$cores_ramos[i] <- cor_divida_transluc
  }
  else if (matriz$nr[i] == "Contribuições e outras receitas do RGPS"){
    matriz$cores_ramos[i] <- cor_RGPS_transluc
  }
# acrescentando condições  
  else if (matriz$nd[i] == "Amortização da Dívida" | matriz$nd[i] == "Juros"){
    matriz$cores_ramos[i] <- cor_divida_transluc2
  }
  
  else if (matriz$nd[i] == "Benefícios Previdenciários RGPS"){
    matriz$cores_ramos[i] <- cor_RGPS_transluc2
  }
}

O diagrama: como são aplicadas as receitas federais?

library(plotly)

p <- function(dados){
  plot_ly(
    type = "sankey",
    orientation = "h",
    opacity = 0.6, # será q isso controla a opacidade dos hovers??

    textfont = list(
      family = "Roboto Condensed Light, Source Sans Pro, Arial Narrow",
      color = "black"
    ),

    node = list(
      label = rotulos,
      color = cores_nos,
      pad = 10,
      thickness = 25,
      line = list(
        color = "",
        width = 0
      )
    ),
    
    hoverlabel = list(
       font = list(
         family = "Roboto Condensed Light, Source Sans Pro, Arial Narrow"
       )
     ),

    link = list(
      source = dados$nos_rec,
      target = dados$nos_desp,
      value =  dados$ramo,
      color = dados$cores_ramos
     #color =  "rgba(255,213,0,0.4)" # o pulo do gato! para deixar a cor translucida, é preciso usar rgba, e o último
                                     # parâmetro é a opacidade
      
      
    )
  ) %>% 
  layout(
    title = "",
    width = 700,
    height = 800,
    font = list(
      family = "Roboto Condensed Light, Source Sans Pro, Arial Narrow",
      size = 11,
      color = "#004a93"
    )
)
}

p(matriz)